/*
* description : filexm.c
* copyright
: (C) by 张鸿烈
* Function
: 本程序说明了怎样通过 linux 文件系统调用取得
*
完整的文件管理信息,以及基本的文件读写操作。
*/
#include "filexm.h"
char data[BSZ]; //文件读写缓冲区
int main(int argc, char *argv[])
{
int fd1,fd2;
//打开文件的文件描述字
int offset;
//文件读字节偏量
int i,size;
//文件读写字节数
//检查命令是否带有约定的运行参数
if(argc < 5){
perror("USAGE: ./filexm read_filename write_filename offset size");
exit(EXIT_FAILURE);
}
// 检查命令指定的读文件名是否存在,如果存在打开该文件
if((fd1 = open(argv[1],O_RDONLY)) < 0){
perror(argv[1]);
exit(EXIT_FAILURE);
}
else //显示读文件名
printf("Open read file: %s\n",argv[1]);
// 建立或打开命令指定的写文件并准备向其追加内容
if((fd2 = open(argv[2],O_CREAT | O_RDWR | O_APPEND ,0644)) < 0){
perror(argv[2]);
exit(EXIT_FAILURE);
}
else//显示写文件名
printf("Create write File: %s\n",argv[2]);
//显示文件读位移量
offset = atoi(argv[3]);
printf("File Read offset: %d\n",offset);
//显示读写文件字节数
size = atoi(argv[4]);
printf("Copy total size: %d\n",size);
//读写文件的内容
lseek(fd1,offset,SEEK_SET); //读位置移到距离读文件头 offset 字节处
for(i=0; i < size/BSZ; i++) {
read (fd1,data,BSZ); //读 BSZ 字节
write(fd2,data,BSZ); //写 BSZ 字节
}
read (fd1,data,size%BSZ); //读 BSZ 字节
write(fd2,data,size%BSZ); //写 BSZ 字节
//关闭文件
if(close(fd2) <0){
perror(argv[2]);
exit(EXIT_FAILURE);
}
if(close(fd1) <0){
perror(argv[1]);
exit(EXIT_FAILURE);
}
//显示写后文件状态
File_State(argv[2]) ;
//显示写后文件内容
if((fd2 = open(argv[2],O_RDONLY)) < 0){
perror(argv[2]);
exit(EXIT_FAILURE);
}
printf("========%s content========\n",argv[2]);
while( read(fd2,data,1) > 0 )
write(1,data,1);
printf("\n");
return EXIT_SUCCESS;
}
